4.2 Interactive Debugging
Debugging failed tests essentially works the same way as
debugging any other problems with Lisp code. Here are a few
tricks specific to tests:
- Re-run the failed test a few times to see if it fails in
the same way each time. It’s good to find out whether the
behavior is deterministic before spending any time looking for
a cause. In the ERT results buffer, r re-runs the
selected test.
- Use . to jump to the source code of the test to
find out exactly what it does. Perhaps the test is broken
rather than the code under test.
- If the test contains a series of
should forms
and you can’t tell which one failed, use l,
which shows you the list of all should forms
executed during the test before it failed.
- Use b to view the backtrace. You can also use
d to re-run the test with debugging enabled, this
will enter the debugger and show the backtrace as well; but the
top few frames shown there will not be relevant to you since
they are ERT’s own debugger hook. b strips
them out, so it is more convenient.
- If the test or the code under testing prints messages using
message, use m to see what messages it
printed before it failed. This can be useful to figure out how
far it got.
- You can instrument tests for debugging the same way you
instrument
defuns for debugging: go to the source
code of the test and type C-u
C-M-x. Then, go back to the ERT buffer and
re-run the test with r or d.
- If you have been editing and rearranging tests, it is
possible that ERT remembers an old test that you have since
renamed or removed: renamings or removals of definitions in the
source code leave around a stray definition under the old name
in the running process (this is a common problem in Lisp). In
such a situation, hit D to let ERT forget about the
obsolete test.